package com.koicarp.agent.example.aiservices;

import com.koicarp.agent.example.ChatModelInit;
import dev.langchain4j.data.message.SystemMessage;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.service.AiServices;
import org.junit.jupiter.api.Test;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: liuxia
 * @CreateTime: 2025/9/16 下午9:33
 * @Description: 系统信息 test
 */
public class SystemMessageTest {


    /**
     * 使用相同SystemMessage test
     */
    @Test
    public void sameSystemMessageTest() {
        ChatModel model = ChatModelInit.initOllama();
        Assistant assistant = AiServices.builder(Assistant.class)
                .chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(10))    // 默认使用内存缓存
                .chatModel(model)
                .build();
        String message1 = assistant.chatSameSystemMessage("1234", "我看见一只鸽子在天上飞，倒影在河边却像燕子");
        System.out.println("ai回答1：" + message1);
        String message2 = assistant.chatSameSystemMessage("1235", "修仙文明传承万万年，日新月异，革故鼎新，宗门如林，强者如蚁。");
        System.out.println("ai回答2：" + message2);
        /**
         * 不同大模型回答的效果不一，该结果仅供参考
         * ai回答1：<think>
         * 好的，我现在需要帮用户润色一段文案。用户是一名专业的文案润色专家，他提供了原文：“我看见一只鸽子在天上飞，倒影在河边却像燕子。” 任务是用现代语，加入修辞手法，让文案更简洁有吸引力。
         * ...
         * 最后，检查润色后的句子是否流畅，是否有足够的吸引力。确认修辞手法是否恰当，画面是否清晰，情感是否传达到位。
         * </think>
         * 天边的鸽群，如同画家的笔触，勾勒出一幅温柔的画卷。
         * 倒映在水中，却似燕子轻盈地掠过，仿佛是被风铃轻轻摇晃的谜影。
         *
         * ai回答2：<think>
         * 嗯，用户给了一个任务，让我作为专业的文案润色专家，帮他改写一段文字。首先，我得仔细看看他提供的原文和要求。
         * ...
         * 最后，检查一下整体流畅度，确保每一句都能衔接自然，没有重复或冗余的地方。这样改写后的文案应该既简洁又有吸引力，同时保留了原有的深意。
         * </think>
         *
         * 【修仙文明传承千载，源远流长，代代相传，生生不息】
         * 【破茧成蝶迎新章，宗门林立，强者如云，群英荟萃，共赴华章】
         */
    }

    /**
     * 使用不同的SystemMessage test
     */
    @Test
    public void noSameSystemMessageTest() {
        ChatModel model = ChatModelInit.initOllama();
        Map<String, SystemMessage> systemMessageMap = new HashMap<>();
        systemMessageMap.put("1234", SystemMessage.from("你是一名专业的文案润色专家，请根据我提供的文案进行润色改写。要【用现代语，有修辞手法】，希望达到【更为简洁、有吸引力】的效果。"));
        systemMessageMap.put("1235", SystemMessage.from("你是一名修仙界元婴期师傅，请根据我的描述认为我适合当体修，还是法修。"));
        Assistant assistant = AiServices.builder(Assistant.class)
                .chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(10))    // 默认使用内存缓存
                .chatModel(model)
                .systemMessageProvider(memoryId-> systemMessageMap.get(memoryId.toString()).text())
                .build();
        String message1 = assistant.chatSameSystemMessage("1234", "我看见一只鸽子在天上飞，倒影在河边却像燕子");
        System.out.println("ai回答1：" + message1);
        String message2 = assistant.chatNoSameSystemMessage("1235", "修仙文明传承万万年，日新月异，革故鼎新，宗门如林，强者如蚁。我更喜欢以力破法");
        System.out.println("ai回答2：" + message2);

        /**
         *
         * 不同大模型回答的效果不一，该结果仅供参考
         * ai回答1：<think>
         * 好的，我现在需要帮用户润色一段文字。用户提供了原文：“我看见一只鸽子在天上飞，倒影在河边却像燕子。” 他们希望用现代语言，并加入修辞手法，使文案更简洁、吸引人。
         * ...
         * 最后，检查润色后的文案是否达到了用户的要求：现代、修辞、简洁且吸引人。确保每句都流畅，并传达出原意的同时，增加趣味性和生动性。
         * </think>
         * 我看到一只天上的鸽子，轻盈地展翅飞翔；水中倒影却幻化成翩跹的燕子。
         *
         * ai回答2：<think>
         * 嗯，我现在需要帮助用户确定自己在修仙界更适合选择体修还是法修。首先，我要理解用户的背景和需求。
         * ...
         * 综合来看，用户更适合选择体修，因为它符合他们喜欢用力量解决问题的习惯，并且在现代修仙界有更大的生存空间和破坏力。
         * </think>
         * 综合以上分析，体修更为适合你当前的偏好和需求，能够更好地发挥你的力量优势，并在现代社会中取得更大的成功空间。
         */
    }
}
